package com.sakiko.aop_01.impl;

import com.sakiko.aop_01.Calculator;

/**
 * description: 代理类 (中介) 【静态代理】
 * 写核心代码，调用目标类核心代码
 */
public class CalculatorPureImplProxy implements Calculator {
    private Calculator calculator = null;

    public CalculatorPureImplProxy(Calculator calculator) { // 也可以使用 setXxx方法传都可以，只要能与 Target类建立联系
        this.calculator = calculator;
    }

    @Override
    public int add(int i, int j) {

        long start = System.currentTimeMillis(); // 进入的时间

        // 核心业务逻辑代码
        int result = calculator.add(i, j);

        long end = System.currentTimeMillis(); // 结束的时间
        System.out.println("方法运行消耗: " + (end - start) + " ms");

        return result;
    }

    @Override
    public int sub(int i, int j) {
        long start = System.currentTimeMillis(); // 进入的时间

        // 核心业务逻辑代码
        int result = calculator.sub(i, j);

        long end = System.currentTimeMillis(); // 结束的时间
        System.out.println("方法运行消耗: " + (end - start) + " ms");

        return result;
    }

    @Override
    public int mul(int i, int j) {
        long start = System.currentTimeMillis(); // 进入的时间

        // 核心业务逻辑代码
        int result = calculator.mul(i, j);

        long end = System.currentTimeMillis(); // 结束的时间
        System.out.println("方法运行消耗: " + (end - start) + " ms");

        return result;
    }

    @Override
    public int div(int i, int j) {
        long start = System.currentTimeMillis(); // 进入的时间

        // 核心业务逻辑代码
        int result = calculator.div(i, j);

        long end = System.currentTimeMillis(); // 结束的时间
        System.out.println("方法运行消耗: " + (end - start) + " ms");

        return result;
    }
}
